const joi = require("joi");

/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */

// 用户名的验证规则
const username = joi.string().min(1).max(20).required().error(new Error("用户名只能包含大写小写字母加数字,长度为1-20位"))
// 密码的验证规则
const password = joi
  .string()
  .pattern(/^[\S]{6,20}$/)
  .required().error(new Error("密码长度为6-20位"))
const type = joi.required().error(new Error("当前模式位空!!"))

// 定义 id, nickname, emial 的验证规则
const id = joi.number().integer().min(1).required();
//昵称
const nickname = joi.string().required();
const email = joi.string().email().required();

// dataUri() 指的是如下格式的字符串数据：
// 
const user_pic = joi.string().dataUri();
// 性别
const sex = joi.string();
// 生日
const birthday = joi.string();
// 个签
const autograph = joi.string();
// 是否删除
const is_delete = joi.string().pattern(/^[01]{1}$/);
// 手机号
const phone = joi.string().required().pattern(/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/)




// 验证规则对象 - 重置密码
exports.update_password_schema = {
  body: {
    // 使用 password 这个规则，验证 req.body.oldPwd 的值
    oldPwd: password,
    // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd 的值
    // 解读：
    // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
    // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
    // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
    newPwd: joi.not(joi.ref("oldPwd")).concat(password),
  },
};

// 注册表单的验证规则对象
exports.reg_reguser_schema = {
  // 表示需要对 req.body 中的数据进行验证
  body: {
    username,
    password,
    cellphone: phone,
    nickname
  },
};
// 登录 表单验证对象
exports.regLogin = {
  body: {
    username,
    password,
  },
}
// 获取分类
exports.regGetClass = {
  query: {
    type,
    pagesize: joi.number(),
    pagenum: joi.number()
  },
}
